"""
在学习完 函数/闭包/装饰器 后, 大家肯定对scope不会陌生

也就是作用域的意思.

接上面的内容, 我们可以通过 autouse 来自动运行, 但是这个时候, 它是每一条用例函数都会运行.

但很多时候, 我们只是希望他运行在某些函数下, 这个时候, 就得需要 scope 加以控制.

fixture scope分为四个类型:

function：每个test都运行，默认是function的scope
class：每个class只运行一次
module：每个module只运行一次
session：每个session只运行一次
"""

## class

"""
顾名思义, 作用域在 测试类 上

每个class中, 不管有多少个用例函数, 都会只执行一次
"""
# import pytest
#
# @pytest.fixture(scope="class", autouse=True)  # 就像 setup_class
# def before():
#     print("------>before")
#
# class TestCase():
#     def test_a(self):
#         print(f"------->test_a")
#
#     def test_b(self):
#         print(f"------->test_b")
#
# class TestCase2():
#
#     def test_a(self):
#         print(f"------->test_a")
#
#     def test_b(self):
#         print(f"------->test_b")
#
#
# if __name__ == '__main__':
#     pytest.main(['-s', '-v', __file__])


## module
"""
module 在这里, 你可以理解成一个脚本文件

也就是说, 一个脚本文件内, 不管有多少 用例函数 都只执行一次 fixture
"""

# import pytest
#
# @pytest.fixture(scope="module", autouse=True)
# def before():
#     print("------>before")
#
# class TestCase():
#
#     def test_a(self):
#         print(f"------->test_a")
#
#     def test_b(self):
#         print(f"------->test_b")
#
# class TestCase2():
#
#     def test_a(self):
#         print(f"------->test_a")
#
#     def test_b(self):
#         print(f"------->test_b")
#
#
# if __name__ == '__main__':
#     pytest.main(['-s', '-v', __file__])

## session
"""
session 就是当前运行的意思

简单来说, 就是每次执行的时候就只运行一次

不管你有多少个 用例文件, 只会运行一次

这里就简单举个例子, 这个具体的现象, 要后续学习完 conftest 后, 才能很好的展示
"""
import pytest

@pytest.fixture(scope="session", autouse=True)
def before():
    print("------>before")

class TestCase():

    def test_a(self):
        print(f"------->test_a")

    def test_b(self):
        print(f"------->test_b")

class TestCase2():

    def test_a(self):
        print(f"------->test_a")

    def test_b(self):
        print(f"------->test_b")


if __name__ == '__main__':
    pytest.main(['-s', '-v', __file__])